home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / dobbs / v16n10 / embedcp.exe / CODE.EXE / MIOTDR.H < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-28  |  8.2 KB  |  240 lines

  1. // Definitions for MIOTDREM
  2. // ------------------------
  3. //
  4. // Portions Copyright (c) 1991, Borland International. All rights reserved.
  5. // Copyright (c) 1991, Stuart G. Phillips.  All rights reserved.
  6. //
  7. // Permission is granted for non-commercial use of this software.
  8. // You are expressly prohibited from selling this software in any form,
  9. // distributing it with another product, or removing this notice.
  10. // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  11. // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  12. // WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  13. // PURPOSE.
  14. //
  15. // Literal definitions for MIOTDREM interface
  16. //
  17.  
  18. // General literals
  19.  
  20. #define TRUE    1
  21. #define FALSE   0
  22. #define NULL    0
  23.  
  24. // MIOTDR configuration literals
  25.  
  26. #define TDSCC           (SCC2|CHANB)    // Selects the SCC and channel to be
  27.                                         // used for the remote interface.
  28.  
  29. #define BUFLEN          (256 + sizeof(union td_omsg) + sizeof(struct td_imsg))
  30.  
  31. // TDREMOTE literals
  32.  
  33. #define TD_VERSION      2               // Protocol version
  34. #define TD_80186        1               // Processor type code
  35. #define NO_8087         0               // No numeric coprocessor
  36. #define VECCOUNT        0x34            // Number of vectors
  37.  
  38. #define TD_SYNC         0x41            // Initial sync-up
  39. #define TD_SENDFILE     0x42            // Send file to remote
  40. #define TD_GETFINFO     0x43            // Get date/time of remote file
  41. #define TD_GO           0x44            // Start execution
  42. #define TD_STOP         0x45            // Stop execution
  43. #define TD_READMEM      0x46            // Read memory
  44. #define TD_WRITEMEM     0x47            // Set memory
  45. #define TD_READIO       0x48            // Read IO
  46. #define TD_WRITEIO      0x49            // Write IO
  47. #define TD_READREGS     0x4a            // Read processor registers
  48. #define TD_WRITEREGS    0x4b            // Write processor registers
  49. #define TD_READFP       0x4c            // Read floating point status
  50. #define TD_WRITEFP      0x4d            // Write floating point status
  51. #define TD_LOADPROG     0x4e            // Load program
  52. #define TD_MAKEPSP      0x4f            // Make PSP
  53. #define TD_PROGFREE     0x50            // Free loaded program
  54. #define TD_MEMSET       0x51            // Set memory
  55. #define TD_MEMCPY       0x52            // Copy memory
  56. #define TD_GETPINFO     0x53            // Get program information
  57. #define TD_OVLHOOK      0x54            // Set Pascal overlay hook
  58. #define TD_BYE          0x55            // End of session
  59.  
  60.  
  61. // Stop codes
  62.  
  63. #define TD_BRK0         18              // Divide by zero interrupt
  64. #define TD_BRK1         2               // Single step interrupt
  65. #define TD_BRK3         3               // Breakpoint interrupt
  66. #define TD_TERM         4               // Program termination
  67. #define TD_KEYINTR      10              // Keyboard interrupt (BREAK)
  68. #define TD_RUNNING      6               // Not stopped, running
  69. #define TD_SSTOP        TD_STOP         // User break
  70.  
  71. // Structure definitions
  72.  
  73. // CPU structures
  74.  
  75. struct f {
  76.     unsigned cf:1;      // Carry flag
  77.     unsigned   :1;      // Reserved
  78.     unsigned pf:1;      // Parity flag
  79.     unsigned   :1;      // Reserved
  80.     unsigned af:1;      // Auxiliary carry flag
  81.     unsigned   :1;      // Reserved
  82.     unsigned zf:1;      // Zero flag
  83.     unsigned sf:1;      // Sign flag
  84.     unsigned tf:1;      // Trap flag
  85.     unsigned ef:1;      // Interrupt enable flag
  86.     unsigned df:1;      // Direction flag
  87.     unsigned of:1;      // Overflow flag
  88.     unsigned fill:4;
  89. };
  90.  
  91.  
  92. struct cpu {
  93.     union {
  94.         struct wr {
  95.             unsigned int uax, ax_32; // Word registers
  96.             unsigned int ubx, bx_32;
  97.             unsigned int ucx, cx_32;
  98.             unsigned int udx, dx_32;
  99.         } w;
  100.         struct br {
  101.             unsigned char al, ah, a_32[2]; // Byte registers
  102.             unsigned char bl, bh, b_32[2];
  103.             unsigned char cl, ch, c_32[2];
  104.             unsigned char dl, dh, d_32[2];
  105.         } b;
  106.     } g_regs;
  107.     unsigned int usp, usp_32;   // Stack pointer
  108.     unsigned int ubp, ubp_32;   // Base pointer
  109.     unsigned int usi, usi_32;   // Source Index
  110.     unsigned int udi, udi_32;   // Destination Index
  111.     struct f flags;             // Processor flags
  112.     unsigned int offset;
  113.     unsigned int segment;       // CS and IP
  114.     unsigned int uds;           // Data segment
  115.     unsigned int uss;           // Stack segment
  116.     unsigned int ues;           // Extra segment
  117.     unsigned int ufs;           // 80386 FS register (unused)
  118.     unsigned int ugs;           // 80386 GS register (unused)
  119. };
  120.  
  121.  
  122. // Inbound (from TD) message formats
  123.  
  124. struct td_imsg {
  125.     unsigned char cmd;
  126.     union {
  127.         struct {    unsigned char count;
  128.                     unsigned int offset;
  129.                     unsigned int segment;
  130.         } td_readmem;
  131.         struct {    unsigned char count;
  132.                     unsigned int offset;
  133.                     unsigned int segment;
  134.                     unsigned char data[1];
  135.         } td_writemem;
  136.         struct {    unsigned int port;
  137.                     unsigned char word_or_byte;
  138.         } td_readio;
  139.         struct {    unsigned int port;
  140.                     unsigned char word_or_byte;
  141.                     unsigned int value;
  142.         } td_writeio;
  143.         struct {    struct cpu regs;
  144.         } td_write_regs;
  145.         struct {    unsigned int offset;
  146.                     unsigned int segment;
  147.                     unsigned int count;
  148.                     unsigned char value;
  149.         } td_memset;
  150.         struct {    unsigned int src_offset;
  151.                     unsigned int src_segment;
  152.                     unsigned int dst_offset;
  153.                     unsigned int dst_segment;
  154.                     unsigned int count;
  155.         } td_memcopy;
  156.     } data;
  157. };
  158.  
  159. // Outboard (to TD) message formats
  160.  
  161. union td_omsg {
  162.     struct {    unsigned char code;
  163.                 unsigned char cpu;
  164.                 unsigned char i8087;
  165.                 unsigned char version;
  166.     } td_sync;
  167.     struct {    unsigned char state;
  168.                 unsigned short term_code;
  169.                 unsigned int i8087;
  170.     } td_stopped;
  171.     struct {    unsigned char status;
  172.     } td_sendfile;
  173.     struct {    long filetime;
  174.     } td_getfinfo;
  175.     struct {    unsigned char data[1];
  176.     } td_readmem;
  177.     struct {    unsigned int value;
  178.     } td_readio;
  179.     struct {    struct cpu regs;
  180.     } td_readregs;
  181.     struct {    unsigned int status;
  182.                 unsigned int pid;
  183.                 unsigned int i8087;
  184.     } td_loadprog;
  185.     struct {
  186.                 unsigned int mem_dos;
  187.                 unsigned int mem_debugger;
  188.                 unsigned int mem_symbols;
  189.                 unsigned int mem_program;
  190.                 unsigned int mem_available;
  191.                 unsigned int ems_dos;
  192.                 unsigned int ems_debugger;
  193.                 unsigned int ems_program;
  194.                 unsigned int ems_available;
  195.                 unsigned int dos_version;
  196.                 unsigned char hardware_bkpts;
  197.                 unsigned char ems_present;
  198.                 unsigned char intflags[VECCOUNT];
  199.     } td_getpinfo;
  200. };
  201.  
  202.  
  203. // Externals
  204.  
  205. // In COMM.C
  206.  
  207. extern void send(unsigned char *,unsigned short);
  208. extern void send_ack();
  209. extern void comm_init();
  210.  
  211. // In MACHINE.C
  212.  
  213. extern int go_program();
  214. extern void read_regs();
  215. extern void write_regs(struct cpu *);
  216. extern void mc_stop();
  217. extern void mc_brk0();
  218. extern void mc_brk1();
  219. extern void mc_brk3();
  220.  
  221. // In MEMIO.C
  222.  
  223. extern void read_memory(unsigned int,unsigned int,unsigned char);
  224. extern void write_memory(unsigned int,unsigned int,unsigned char,
  225.                          unsigned char *);
  226. extern void read_io(unsigned int,unsigned char);
  227. extern void write_io(unsigned int,unsigned char,unsigned int);
  228.  
  229. extern void set_mem(unsigned int,unsigned int,unsigned int,
  230.                     unsigned char);
  231. extern void copy_mem(unsigned int,unsigned int,unsigned int,
  232.                      unsigned int, unsigned int);
  233.  
  234.  
  235. // In MAIN.C
  236.  
  237. extern unsigned char tx_buffer[BUFLEN];
  238. extern unsigned char rx_buffer[BUFLEN];
  239. extern struct td_imsg *msgq;
  240.